#include "Escena.h"

#include <glm\gtc\matrix_transform.hpp>


Escena::Escena() : 
	m_angulo_brazo(0.0f), m_grua(10, 20),
	m_edificio(5, 10, 25), m_bosque(7)
{
	this->m_vecPosGrua = glm::vec3(10.0f, 3.0f, 0.0f);
	this->m_vecPosBosque = glm::vec3(-5.0f, -15.0f, 0.0f);
	this->m_posEscombros = glm::vec3(14.0f, -10.0f, 0.0f);
	this->m_vecPosEdificio = glm::vec3(0.0f, 0.0f, 0.0f);
}


void Escena::init(const glm::vec3 &DireccionLuz) {
	this->m_sky.init(DireccionLuz);
	this->m_grua.init(DireccionLuz);
	this->m_escombros.init(DireccionLuz);
	this->m_edificio.init(DireccionLuz);
	this->m_bosque.init(DireccionLuz);

	this->m_tierra.init(DireccionLuz, "ShadowTextureShader.vert", "ShadowTextureShader.frag");
	this->m_tierra.setMaterial( glm::vec3(0.7765f, 0.7922f, 0.8039f), glm::vec3(0.2588f, 0.2641f, 0.268f), glm::vec3(0.0f, 0.0f, 0.0f), 1.0f );
	this->m_tierra.setTextura("Piso_pedregoso.dds");
}


void Escena::renderizar(const glm::mat4 &matVista, const glm::mat4 &matProyeccion, const glm::mat4 &matModelo) const {
	this->m_sky.renderizar( matVista, matProyeccion, matModelo );

	// El piso de la escena
	this->m_tierra.renderizar( matVista, matProyeccion, matModelo );

	// La grua a un lado del edificio
	glm::mat4 matModelGrua = glm::translate( matModelo, this->m_vecPosGrua );
	this->m_grua.renderizar( matVista, matProyeccion, matModelGrua );

	// Los monticulos con materiales de construccion
	glm::mat4 posMonticulos = glm::translate( matModelo, this->m_posEscombros );
	this->m_escombros.renderizar(matVista, matProyeccion, posMonticulos);

	glm::mat4 posBosque = glm::translate( matModelo, this->m_vecPosBosque );
	this->m_bosque.renderizar(matVista, matProyeccion, posBosque);

	// El edificio
	glm::mat4 matModelEdificio = glm::translate( matModelo, this->m_vecPosEdificio );
	this->m_edificio.renderizar( matVista, matProyeccion, matModelEdificio );
}


void Escena::rotarBrazoGrua(float anguloGiro){
	this->m_angulo_brazo += anguloGiro;
	this->m_grua.rotarBrazo( this->m_angulo_brazo );
}


